package com.example.qrcode.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.qrcode.entity.ProductDetail;
import com.example.qrcode.mapper.ProductDetailMapper;
import com.example.qrcode.service.ProductDetailService;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

@Service
public class ProductDetailServiceImpl extends ServiceImpl<ProductDetailMapper, ProductDetail> implements ProductDetailService {

    @Autowired
    private RestTemplate restTemplate;
    
    // 二维码管理系统的API地址，可以从配置文件中读取
    @Value("${qrcode.system.api.url:http://localhost:8080}")
    private String qrCodeSystemApiUrl;

    public ProductDetail getByProductSNo(String productSNo) {
        if (productSNo == null || productSNo.isEmpty()) {
            return null;
        }
        QueryWrapper<ProductDetail> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("product_s_no", productSNo);
        return this.getOne(queryWrapper);
    }
    
    @Override
    public boolean checkDeviceExists(String productSNo) {
        try {
            // 这里应该调用二维码管理系统的API来验证设备是否存在
            // 示例实现，实际需要根据二维码管理系统的API进行调整
            String url = qrCodeSystemApiUrl + "/api/device/check/" + productSNo;
            
            // 发送GET请求到二维码管理系统
            String response = restTemplate.getForObject(url, String.class);
            
            // 假设返回的是JSON格式，包含设备存在状态
            // 这里需要根据实际的API响应格式进行调整
            return response != null && response.contains("\"exists\":true");
            
        } catch (Exception e) {
            System.err.println("检查设备存在性失败: " + e.getMessage());
            // 如果无法连接到二维码管理系统，默认返回true（允许保存）
            // 实际项目中可能需要根据业务需求调整这个逻辑
            return true;
        }
    }
    
    @Override
    public String getDeviceIdFromQRSystem(String productSNo) {
        try {
            // 首先从当前数据库查询是否已有deviceId
            ProductDetail existingProduct = this.getByProductSNo(productSNo);
            if (existingProduct != null && existingProduct.getDeviceId() != null && !existingProduct.getDeviceId().isEmpty()) {
                System.out.println("从数据库获取到deviceId: " + existingProduct.getDeviceId());
                return existingProduct.getDeviceId();
            }
            
            // 如果数据库中没有，则调用二维码管理系统的API获取deviceId
            String url = qrCodeSystemApiUrl + "/api/device/getDeviceId/" + productSNo;
            
            // 发送GET请求到二维码管理系统
            String response = restTemplate.getForObject(url, String.class);
            
            // 假设返回的是JSON格式，需要解析出deviceId
            // 这里需要根据实际的API响应格式进行调整
            if (response != null && response.contains("\"deviceId\":")) {
                // 简单的JSON解析，实际项目中建议使用Jackson或Gson
                int startIndex = response.indexOf("\"deviceId\":\"") + 12;
                int endIndex = response.indexOf("\"", startIndex);
                if (startIndex > 11 && endIndex > startIndex) {
                    String deviceId = response.substring(startIndex, endIndex);
                    System.out.println("从二维码管理系统获取到deviceId: " + deviceId);
                    return deviceId;
                }
            }
            
            // 如果无法获取deviceId，返回产品序列号作为默认值
            System.out.println("无法获取deviceId，使用产品序列号作为默认值: " + productSNo);
            return productSNo;
            
        } catch (Exception e) {
            System.err.println("获取deviceId失败: " + e.getMessage());
            // 如果无法连接到二维码管理系统，返回产品序列号作为默认值
            return productSNo;
        }
    }
    
    @Override
    public boolean removeByProductSNo(String productSNo) {
        try {
            if (productSNo == null || productSNo.isEmpty()) {
                System.err.println("产品序列号不能为空");
                return false;
            }
            
            // 使用QueryWrapper构建删除条件
            QueryWrapper<ProductDetail> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("product_s_no", productSNo);
            
            // 执行删除操作
            boolean result = this.remove(queryWrapper);
            
            if (result) {
                System.out.println("成功删除产品: " + productSNo);
            } else {
                System.out.println("删除产品失败: " + productSNo);
            }
            
            return result;
            
        } catch (Exception e) {
            System.err.println("删除产品异常: " + e.getMessage());
            e.printStackTrace();
            return false;
        }
    }

}
